<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Vue.set的使用</title>
    <!--引入vue-->
    <script type="text/javascript" src="../js/vue.js"></script>
   </head>

<body>
    <!--准备好一个容器-->
    <div id="root">
      <h1>学校信息</h1>
  <button @click="masterInfo">点击获取校长信息</button>
  <h2>学校名称：{{school.name}}</h2>
  <h2>学校地址：{{school.address}}</h2>
  <h2 v-if="school.master">校长是：{{school.master}}</h2>
  <hr/>
  <h1>学生信息</h1>
  <button @click="addSex">添加一个性别属性，默认值是女</button>
  <h2>姓名：{{student.name}}</h2> 
  <h2>年龄：真实{{student.age.rAge}}，对外{{student.age.sAge}}</h2> 
  <h2 v-if="student.sex">性别：{{student.sex}}</h2> 
  <h2>朋友们</h2>  
    <!-- 列表  -->
    <ul>
      <li v-for="(f,index) in student.fridends" :key="index">{{f.name}}--{{f.age}}</li>
    </ul>
    </div>
</body>
<script type="text/javascript">
    Vue.config.productionTip = false  //阻止vue在启动时生成使用生产版本提示。

    const vm =  new Vue({
      el:'#root',
      data:{
        school:{
          name:'天津大学',
          address:'卫津路92号',
        },             
        student:{
          name:'tom',
          age:{
            rAge:30,
            sAge:25
          },
          sex:'',
          fridends:[
            {name:'jerry',age:35},
            {name:'tony',age:24}
            ]          
        }
      },
      methods: { // 一般情况下methods正常写，this就是当前对象vm
        addSex(){
          Vue.set(this.student,'sex','女')
          //this.$set(this.student,'sex','女')
        },
        masterInfo(){
          // 不允许给data对象身上直接追加属性。只允许给data对象身上的属性追加属性；Vue.set()这个api不是万能的
          //Vue.set(vm._data,'master','冯骥才')// 报错--[Vue warn]: Avoid adding reactive properties to a Vue instance or its root $data at runtime - declare it upfront in the data option.
          this.$set(this.school,'master','冯骥才')
          //Vue.set(this.school,'master','冯骥才')
        }
      },
    })
</script>
</html>
